package com.hzya.frame.util;

import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
import cn.hutool.crypto.symmetric.SymmetricCrypto;

import static cn.hutool.crypto.CipherMode.encrypt;

/**
 * @Description AES加密解密
 * @Author xiang2lin
 * @Date 2021/3/16 15:48
 **/
public class AESUtil {
    private static String KEY = "`o7eotan9ws8c:aj";

    /**
     * AES加密
     * @param data 要加密的内容
     * @return 密文字符串
     */
    public static String encrypt(String data){
        if (StrUtil.isNotEmpty(data)){
            return encrypt(data,KEY);
        }
        return null;
    }

    /**
     * AES加密
     * @param data 待加密的字符串
     * @param key 秘钥
     * @return 加密后的字符串
     */
    public static String encrypt(String data,String key){
        if (StrUtil.isNotEmpty(data) && StrUtil.isNotEmpty(key)){
            return SecureUtil.aes(key.getBytes()).encryptHex(data);
        }
        return null;
    }
    /**
     * AES加密
     * @param content 待加密的字符串
     * @return 加密后的字符串
     */
    public static String encipher(String content){
        // 生成密钥
        byte[] byteKey = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue(), KEY.getBytes()).getEncoded();
        SymmetricCrypto aes = SecureUtil.aes(byteKey);
        // 加密
        String encryptData = aes.encryptBase64(content);
        // 解密
        //String decryptData = aes.decryptStr(encryptData);
        return encryptData;
    }
    /**
     * AES解密
     * @param ciphertext 密文
     * @return 解密后的明文
     */
    public static String decrypt(String ciphertext){
        if (StrUtil.isNotEmpty(ciphertext)){
            return decrypt(ciphertext,KEY);
        }
        return null;
    }

    /**
     * AES解密
     * @param ciphertext 密文
     * @param key 秘钥
     * @return 解密后的明文
     */
    public static String decrypt(String ciphertext,String key){
        if (StrUtil.isNotEmpty(ciphertext) && StrUtil.isNotEmpty(key)){
            return SecureUtil.aes(key.getBytes()).decryptStr(ciphertext);
        }
        return null;
    }

    public static void main(String[] args) {
        String data = "U8C241231";
        String encrypt1 = encrypt(data);
        System.out.println(encrypt1);
    }
}
